﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace QldtSdh.GUI.DaoTao
{
    using BLL;
    using DAL;
    using DAL.Models;
    using GUI.Utils;
    using GUI.Common;
    using Utils;

    public partial class FormInBangTheoDoiQTHT_Batch : QldtSdh.GUI.Common.BaseDialog
    {
        private IList<LopHocPhan> _LopHocPhanCollection;
        private HocKy _HocKy;
        private DonVi _DonVi;

        public FormInBangTheoDoiQTHT_Batch(IList<LopHocPhan> list, HocKy hocKy, DonVi donVi)
        {
            InitializeComponent();
            this._LopHocPhanCollection = list;
            this._HocKy = hocKy;
            this._DonVi = donVi;
            this.Text = "In bảng theo dõi Quá trình học tập...";
            lblHeader.Text = string.Format("In bảng theo dõi Quá trình học tập của các lớp học phần thuộc {0} trong {1}", donVi.TenDonVi, hocKy.TenHocKyDayDu);
            radInRaGiay.Checked = true;
            cbxLoaiTep.SelectedIndex = 0;
            UpdateGuiBySelectedTypeOfExport();
        }

        private void UpdateGuiBySelectedTypeOfExport()
        {
            panel1.Enabled = radInRaTep.Checked;
        }

        private void radInRaGiay_CheckedChanged(object sender, EventArgs e)
        {
            UpdateGuiBySelectedTypeOfExport();
        }

        private void btnChonThuMuc_Click(object sender, EventArgs e)
        {
            var dlg = new FolderBrowserDialog();
            dlg.Description = "Chọn đường dẫn chứa tệp...";
            dlg.ShowNewFolderButton = true;
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                txtDuongDanThuMuc.Text = dlg.SelectedPath;
        }

        private void btnDongY_Click(object sender, EventArgs e)
        {
            var docType = cbxLoaiTep.SelectedIndex == 0 ? QldtSdh.Utils.PrintUtil.DocType.Word : QldtSdh.Utils.PrintUtil.DocType.Excel;
            var docExt = docType == QldtSdh.Utils.PrintUtil.DocType.Excel ? ".XLS" : ".DOC";
            var stFolder = txtDuongDanThuMuc.Text;
            if (System.IO.Directory.Exists(stFolder) == false && radInRaGiay.Checked == false)
            {
                DialogUtils.ShowErrorWithDefaultTitle("Thư mục \"{0}\" chưa tồn tại!", stFolder);
                return;
            }

            var bw = new BackgroundWorker();
            bw.WorkerReportsProgress = true;
            bw.WorkerSupportsCancellation = true;
            bw.DoWork += (oSender, oE) =>
            {
                var frm = new FormInBangTheoDoiQTHTcs();
                for (int i = 0; i < _LopHocPhanCollection.Count; i++)
                {
                    if (bw.CancellationPending)
                        return;
                    var lopHocPhan = _LopHocPhanCollection[i];

                    bw.ReportProgress(0, string.Format("{0}/{1} - Đang in {2}", i + 1, _LopHocPhanCollection.Count, lopHocPhan.TenLopHocPhan));
                    if (lopHocPhan.HocPhan == null)
                    {
                        var hocPhan = BizHocPhan.GetByID(lopHocPhan.MaHocPhanGUID);
                        if (hocPhan == null)
                        {
                            DialogUtils.ShowErrorWithDefaultTitle("Không thể xác định Học phần của lớp học phần {0}", lopHocPhan.TenLopHocPhanFull);
                            return;
                        }
                        lopHocPhan.HocPhan = hocPhan;
                    }

                    if (string.IsNullOrEmpty(lopHocPhan._TenNganhDaoTao))
                    {
                        lopHocPhan._TenNganhDaoTao = BizChuyenNganhDaoTao.GetChuyenNganhDaoTaoOfLopKhoaNganh(lopHocPhan.MaLopKhoaNganhThamChieu);
                    }

                    var lstHocVien = new QldtSdh.Utils.MySortableBindingList<LopHocPhan_HocVien>(BizLopHocPhan.GetListDangKyLopHocPhan(lopHocPhan.MaLopHocPhanGUID));
                    frm.LoadReport(lstHocVien,
                        lopHocPhan._TenHocPhan, lopHocPhan._MaHocPhan, lopHocPhan._SoTinChi, lopHocPhan._TenNganhDaoTao, _HocKy.TenHocKyDayDu);
                    if (radInRaGiay.Checked)
                        QldtSdh.Utils.PrintUtil.DoPrint(frm.LocalReport, true);
                    else
                        QldtSdh.Utils.PrintUtil.DoExport(frm.LocalReport, docType, System.IO.Path.Combine(stFolder,
                            string.Format("{0}-TheoDoiQTHT{1}", lopHocPhan.MaLopHocPhanGUID, docExt)), true);
                }
            };
            bw.ProgressChanged += (oSender, oE) =>
            {
                lblStatus.Text = oE.UserState.ToString();
            };
            bw.RunWorkerCompleted += (oSender, oE) =>
            {
                btnDongY.Enabled = true;
                pnlInput.Enabled = true;
                pnlProgress.Visible = false;
                btnBoQua.Tag = null;
                if (this.Visible && radInRaGiay.Checked == false)
                    DialogUtils.ShowMessage("Đã in xong");
            };
            btnDongY.Enabled = false;
            pnlInput.Enabled = false;
            pnlProgress.Visible = true;
            btnBoQua.Tag = bw;
            bw.RunWorkerAsync();
        }

        private void btnBoQua_Click(object sender, EventArgs e)
        {
            if (btnBoQua.Tag != null)
                (btnBoQua.Tag as BackgroundWorker).CancelAsync();
            else
                this.Close();
        }

        private void FormInBangChamDiemQTHT_Batch_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = btnBoQua.Tag != null;
        }
    }
}
